<!DOCTYPE html>
<html lang="en">
<head>
    <meta  http-equiv="content-type" content="text/html" charset="utf-8"/>
    <meta charset="UTF-8">
    <title>Title</title>
    <!-- 加上defer属性：（代码已经加载进来了，延迟执行）。执行时机：当页面都加载完毕之后-->
    <script type="text/javascript" charset="UTF-8" src="test.js" ></script>
    <script type="text/javascript">
        /**
         * function的形式定义函数

        function test(){

        }*/
        /**
         * 函数直接量定义函数，推荐方式

        var test2 = function(){

        }*/
        /**
         * function 构造函数式定义函数

        var test3 = new Function("a","b","return a+b");*/
        /*************************************************/
        /**
         * 效率对比
         * @type {Date}

        var d1 = new Date();
        var t1 = d1.getTime();
        for(var i=0;i<100000;i++){
           // function test(){;}//定义一个空函数;很快，因为只会被编译一次，放入内存中，其他地方就可以随便调用
           var test2 = new Function();//定义一个空函数；慢，每次都会创建，动态
        }
        var d2 = new Date();
        var t2 = d2.getTime();
        alert(t2-t1);*/

        /**
         *  函数直接量形式与function语句式解析顺序

        test1();//正确，会先域编译test1,所以正确
        function test1(){

        }

        alert(test2);//undefined   表示test2只申明了但是未赋值
        test2();//报错，因为是顺序执行，此时test2后的函数已经声明，但是未赋给test2
        var test2 = function(){

        }  */



        /**
         * 解析顺序


        function f(){return 1;}
        alert(f());//4
        var f = new Function("return 2;");
        alert(f());//2
        var f = function(){return 3;}
        alert(f());//3
        function f(){return 4;}
        alert(f());//3
        var f = new Function("return 5;");
        alert(f());//5
        var f = function(){return 6;}
        alert(f());//6 */

        /**
         * 函数作用域
         */

        var k = 1;
        function t1(){
            var k=2;
            function test(){return k;}
            var test1 = function(){return k;}
            var test = new Function("return k;");
            alert(test());
        }
        t1();
    </script>
</head>
<body>

</body>
</html>